<?
	/* Se asegura que el archivo es incluido por el index */
		defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Establecimiento_lst( $this );

	class Establecimiento_lst  extends Lst
	{
	function Establecimiento_lst( &$oModule )
		{
			$this->Lst( $oModule );
			$this->aFields['cKeyLookUp'] = getParam( PARAM_KEYLOOKUP );
		}
	function setLevel()
		{
			switch ( $this->getOptionView() )
			{
				case 'E':
					$this->aShowColumns = array( 'Nombre', 'ncRotulo' );
					break;
				case 'L':
					$this->aShowColumns = array( 'bEstrella', 'ncRotulo', 'Nombre', 'Domicilio', 'Telefono', 'Modif', 'Coordenadas' );
					if ( $this->aFields['ncFunciones']  )  $this->aShowColumns[] = 'Funcion';
					if ( $this->aFields['aRotulo'] ) $this->aShowColumns[] = 'nOrden';
					break;
			}
		}
	function initialize()
	{
			$this->aFields['ncFunciones'] = getParam( 'ncFunciones' ) ;
			$this->aFields['bProblemas'] = getParam( 'bProblemas' ) ;
			$this->aFields['bSinFuncion'] = getParam( 'bSinFuncion' ) ;
			$this->aFields['bActivo'] = getParam( 'bActivo' ) ;
			$this->aFields['bUsig'] = getParam( 'bUsig' ) ;
			$this->aFields['aRotulo'] = is_array( getParam( 'aRotulo' ) )  ? implode(",", getParam( 'aRotulo' ) ): getParam( 'aRotulo' );
			$this->oFiltro = $this->oModule->loadClass( 'Establecimiento_frm' );
			$this->aFields = array_merge ( (array)$this->aFields,  (array)$this->oFiltro->getFieldArray() );
			// Obtiene de su filtro los parametros que necesita para armar el query
			$this->setTitle ( "Establecimientos" );
			$this->setSummary( "Esta tabla contiene el listado de los Establecimientos" );
			$this->addColumnTag( 'ncRotulo', ACTUALIZAR_TAG_ESTABLECIMIENTOS, 'ncEstablecimiento', 'gtEstablecimientoRotulo', $this->oDatabase->getKeyArray('SELECT ncRotulo, cdRotulo FROM gtRotuloEstablecimiento' ) );
			$this->addColumnStar ( 'bEstrella', MODIFICAR_ESTRELLA_ESTABLECIMIENTO, 'ncEstablecimiento', 'bEstrella' );
			$this->addColumn ( 'Nro', 'ncEstablecimiento', true );
			$this->addColumn ( 'Nombre', 'cdEstablecimiento' , true);
			$this->setColumnAction ( 'Nombre', VER_ESTABLECIMIENTO, 'ncEstablecimiento');
			$this->addColumn ( 'Domicilio', '' );
			$this->addColumn ( 'Ubicacion', '' );
			$this->addColumn ( 'CodigoUbicacion', '' );
			$this->addColumn ( 'Coordenadas', '' );
			$this->addColumn ( 'Telefono' );
			$this->addColumn ( 'Modif' );
			$this->addColumn ( 'Observaciones', '' );
			$this->addColumn ( 'Direccion', '' );
			$this->addColumn ( 'Altura', '' );
			$this->addColumn ( 'Web', 'cPaginaWeb' );
			$this->addColumn ( 'Email', 'cEmail' );
			$this->addColumn ( 'Funcion', '' );
			$this->addColumn ( 'Funciones', '' );
			$this->addColumn ( 'Categoria', '' );
			$this->addColumn ( 'Servicios', '' );
			$this->addColumn ( 'Productos', '' );
			$this->addColumn ( 'Organizacion', 'cdOrganizacion' );
			$this->addColumnOrder ( 'nOrden', MODIFICAR_ORDER_ROTULO_ESTABLECIMIENTO, 'ncEstablecimiento,ncRotulo', 'ERo.nOrden' );
			$oModAdministracion =& loadModule('administracion');			
			$this->setColumnAction( 'Organizacion', VER_ORGANIZACION, 'ncOrganizacion', "" , &$oModAdministracion );
			
			if ( $this->aFields['aRotulo'] ) {
				$aDatos = $this->oDatabase->getMatrix("SELECT ncEstablecimiento, ncRotulo, nOrden FROM gtEstablecimientoRotulo WHERE ncRotulo = " . $this->aFields['aRotulo'] . " ORDER BY nOrden ASC" );
				for( $nIndex = count($aDatos ); $nIndex > 0 ; $nIndex--) {
					if ( $aDatos[$nIndex -1][nOrden] != $nIndex ) {
						$this->oDatabase->update( 'gtEstablecimientoRotulo', 'nOrden', $nIndex, 'WHERE', 'ncRotulo', $aDatos[$nIndex -1][ncRotulo], 'ncEstablecimiento', $aDatos[$nIndex -1][ncEstablecimiento]);
						//echo $aDatos[$nIndex -1][nOrden] . ' ' . $nIndex ;
					}
				}
				$this->oPaging->setDefaultOrderBy('ERo.nOrden', 'ASC');
			}
			
			$this->addColumnMultiLanguage ( 'Horarios', 'cHorarios' );
			$this->addColumn ( 'Tipo' );

			if ( getParam("ncFuncion") )
			{
				$oTab =& $this->setIndex( INDEX_USER, TAB_TOP, 'ncCategoriaEstablecimiento' );
				$cSql = "SELECT ncCategoriaEstablecimiento, cdCategoriaEstablecimiento FROM gcCategoriaEstablecimiento WHERE ncFuncion = " . getParam("ncFuncion") ;
				$oTab->setMatrixMultilanguage( $this->oDatabase->getMatrix($cSql) );
			}
	}
	function makeRowProperties( $aRow)
	{
		//if ( array_key_exists('bActivo', $aRow ) &&  $aRow['bActivo'] == false ) $cReturn =  " style='background-color:#cf0010' " ;
		$aColores = array( 1 => 'green', 2 => 'white', 3 => 'red', 4 => 'black', 5 => 'yellow');
		return " style='background-color:". $aColores[$aRow['ncEstadoPublicacion']]."' " ;;

	}
	function query()
		{
			// Crea el Objeto Domicilio
				$oModAdministracion =& loadModule('administracion');
				$oModAdministracion->setSubModule('entidades');
				$this->oDomicilio = $oModAdministracion->loadClass( 'Domicilio_frm' );
			// Convierte a variables el aFields
				extract( $this->getFieldArray() );
			// Si filtra por Ubicacion toma algunos datos
				if ( $ncUbicacion  )
				{
					list($ncPais, $ncUbicacion ) = explode('|', $ncUbicacion );
					$cCamino = $this->oModule->oDatabase->getData( "SELECT cCamino FROM acUbicacion WHERE ncPais = $ncPais AND ncUbicacion = $ncUbicacion" );
				}
			// Arma el Query
				$cSql = "SELECT Est.ncEstadoPublicacion, Est.dModificacion, cUsuario, Est.ncOrganizacion, Est.dDesde, Est.ncEstablecimiento, Est.cdEstablecimiento, ifnull(EPa.ncDomicilio, Est.ncDomicilio) as ncDomicilio, Est.bBaja, Est.cPaginaWeb, Est.cEmail, Est.bEstrella, Est.cHorarios, Est.cObservaciones, cdOrganizacion " .  ($this->aFields['aRotulo'] ? ", ERo.nOrden, ERo.ncRotulo": "")  .  ($ncFuncion ? ", EAc.bActivo,  EAc.ncFuncion as ncFuncion ": "") . "
							FROM gtEstablecimiento as Est
							LEFT JOIN gtEstablecimiento as EPa
								ON Est.ncEstablecimientoPadre = EPa.ncEstablecimiento
							LEFT JOIN stUsuario as Usu
								ON Usu.ncUsuario = Est.ncUsuario
							LEFT JOIN atOrganizacion as Org
								ON Org.ncOrganizacion  = Est.ncOrganizacion 
							LEFT JOIN atDomicilio AS Dom
									ON Dom.ncDomicilio = ifnull(Est.ncDomicilio, EPa.ncDomicilio)";
			// Arma el Filtro de la Consulta
				$this->oFiltro->aFields['ncDomicilio']->setFilterPrefix('Dom');
				$aFiltro = $this->oFiltro->getFilterdArray('Est');
				$this->oWhere->addArray ( $aFiltro , 'Est' );
				$this->oWhere->replace( 'Est.latitud', 'Ifnull(Dom.nLatitud, 0)' );
				$this->oWhere->replace( 'Est.calle', 'DUr.cCalle', '', 'atDomicilioUrbano as DUr', 'DUr.ncDomicilio = Est.ncDomicilio');
				$this->oWhere->replace( 'Est.Funcion', 'EAc.ncFuncion', '', 'gtEstablecimientoFuncion as EAc', 'EAc.ncEstablecimiento = Est.ncEstablecimiento');
				$this->oWhere->replace( 'Est.ncCategoriaEstablecimiento', 'EAc.ncCategoriaEstablecimiento');
				$this->oWhere->replace( 'Est.ncServicio', 'ESe.ncServicio', '', 'gtEstablecimientoServicio as ESe', 'ESe.ncEstablecimiento = Est.ncEstablecimiento');
				$this->oWhere->replace( 'Est.aRotulo', 'ERo.ncRotulo', '', 'gtEstablecimientoRotulo as ERo', 'ERo.ncEstablecimiento = Est.ncEstablecimiento');
				$this->oWhere->replace( 'Est.aFormaPago', 'EFp.ncFormaPago', '', 'gtEstablecimientoFormaPago as EFp', 'EFp.ncEstablecimiento = Est.ncEstablecimiento');
				$this->oWhere->replace( 'Est.ncProducto', 'PEs.ncProducto', '', 'gtProductoEstablecimiento as PEs', 'PEs.ncEstablecimiento = Est.ncEstablecimiento');
				
				if ( $this->aFields[bProblemas]  ) $this->oWhere->addExpression ( "Est.ncDomicilio", "Est.ncDomicilio is null or ncDomicilio in ( SELECT ncDomicilio FROM atDomicilio WHERE ncUbicacion is NULL UNION ALL SELECT ncDomicilio FROM atDomicilioUrbano WHERE (nNumero is NULL OR nNumero = 0) AND cCalleInterseccion IS NULL ) " );
				if ( $this->aFields[bSinFuncion] ) $this->oWhere->addExpression ( "Est.ncEstablecimiento", "Est.ncEstablecimiento NOT IN ( SELECT ncEstablecimiento FROM gtEstablecimientoFuncion ) " );
				if ( $this->aFields[bUsig] ) 
				{
					$this->oWhere->addExpression ( "Est.ncDomicilio", "Est.ncDomicilio is NOT null AND ncDomicilio not in ( SELECT ncDomicilio FROM atDomicilio WHERE (ncUbicacion is NULL OR  ncUbicacion < 601 OR ncUbicacion > 648 )UNION ALL SELECT ncDomicilio FROM atDomicilioUrbano WHERE (nNumero is NULL OR nNumero = 0) AND cCalleInterseccion IS NULL ) " );
					$this->oWhere->addExpression ( "Est.ncEstadoPublicacion",  "Est.ncEstadoPublicacion IN  ( 2,5 ) "  );
				}
				//if ( $this->getOptionView() != 'R' && !($this->aFields[bBaja] === '') ) $this->oWhere->addExpression ( "Est.bBaja", "Est.bBaja = " .  ($this->aFields[bBaja] ? "1":"0")  );
				if ( !$ncEstablecimientoPadre )  $this->oWhere->add ( "Est.ncEstablecimiento", $ncEstablecimiento );
				else $this->oWhere->add ( "Est.ncEstablecimientoPadre", $ncEstablecimientoPadre );
				
				$this->oWhere->add ( "Est.ncOrganizacion", $ncOrganizacion );
				if ( ($this->aFields[bActivo] != '' )&&  ($this->aFields[ncFunciones] || $this->aFields[ncFuncion]) ) $this->oWhere->addExpression( "EAc.bActivo", "EAc.bActivo =  $bActivo "  );
				if ( $cdEstablecimiento )
				{
					$aEstablecimientos1 = $this->oDatabase->getArray( "SELECT ncEstablecimiento FROM gtAtractivo WHERE cdAtractivo LIKE '%$cdEstablecimiento%'" ); 
					$aEstablecimientos2 = $this->oDatabase->getArray( "SELECT ncEstablecimiento FROM gtEstablecimientoFuncion WHERE cdEstablecimiento LIKE '%$cdEstablecimiento%'" ); 
					$cEstablecimientos = implode(',', array_merge($aEstablecimientos1, $aEstablecimientos2) );
					if ( $cEstablecimientos ) 
						$this->oWhere->addExpression ( "Est.cdEstablecimiento", " ( Est.cdEstablecimiento LIKE '%$cdEstablecimiento%' OR Est.ncEstablecimiento IN ($cEstablecimientos ) ) " );
				}
				//$this->oWhere->addExpression (  "Est.bBaja", "Est.bBaja = 0" );
				$this->oWhere->addKey ( $this->oDatabase->dbConcat( "' '", "Est.cdEstablecimiento" ), $this->aFields[cKeyLookUp] ); //
				$cSql . $this->oWhere->make();
				return $cSql . $this->oWhere->make();
		}
	function makeColumn ( $aRow, $cField )
		{
			switch( $cField )
			{
				case 'Modif':
					$oFecha = new DateObject( $aRow['dDesde']);
					if ( $aRow['dModificacion'] ) $oFecha->setValue($aRow['dModificacion'] );
					$cReturn = $oFecha->getShortDescription() .   '(' . $aRow['cUsuario']  . ')';
					break;
				case 'Observaciones':
					$cSql = "SELECT cObservaciones  FROM gtEstablecimientoFuncion EAc JOIN gcFuncion as Ac ON Ac.ncFuncion = EAc.ncFuncion WHERE ncEstablecimiento =  " . $aRow['ncEstablecimiento'];
					$cReturn = $this->aRow['cObservaciones'] . implode( "<br>", $this->oDatabase->getArray($cSql)) ;
					break;
				case 'Servicios':
					$cReturn = implode( "," , $this->oDatabase->getArray( "SELECT cdServicio FROM gtEstablecimientoServicio as EAc JOIN gcServicio as Act ON Act.ncServicio = EAc.ncServicio WHERE ncEstablecimiento = " . $aRow['ncEstablecimiento'] ) );
					break;
				case 'Tipo':
					$cReturn = implode( "," , $this->oDatabase->getArray( "SELECT cdTipoCocina FROM gtGastronomiaTipoCocina as GTi JOIN gcTipoCocina as TCo ON TCo.ncTipoCocina = GTi.ncTipoCocina WHERE ncEstablecimiento = " . $aRow['ncEstablecimiento'] ) );
					break;
				case 'Productos':
					$cReturn = implode( "," , $this->oDatabase->getArray( "SELECT cdProducto FROM gtProductoEstablecimiento as PEs  JOIN gtProductoTuristico as PTu ON PEs.ncProducto = PTu.ncProducto  WHERE ncEstablecimiento =   " . $aRow['ncEstablecimiento']  ) );
					break;
				case 'Funcion':
					if ( !$this->aFunciones ) $this->aFunciones = $this->oDatabase->getKeyArray( "SELECT ncFuncion, cdFuncion FROM gcFuncion " );
					$cReturn = extractLanguage( $this->aFunciones[$aRow['ncFuncion']], 'es' ) ;
					break;
				case 'Funciones':
					$aFunciones = $this->oDatabase->getMatrix( "SELECT cdFuncion, EAc.bActivo FROM gtEstablecimientoFuncion as EAc JOIN gcFuncion as Act ON Act.ncFuncion = EAc.ncFuncion WHERE ncEstablecimiento = " . $aRow['ncEstablecimiento']  );
                    foreach( $aFunciones  as $oFuncion )
					{
						if ( $oFuncion['bActivo'] )
							$cReturn .= extractLanguage( $oFuncion['cdFuncion'], 'es' ) . ', ';
						else
							$cReturn .= "<span style='color: red'>" . extractLanguage( $oFuncion['cdFuncion'], 'es' ) . "</span>" . ', ';
					}
					break;
				case 'Categoria':
					$cReturn = '';
					if ( $this->aFields['ncFuncion'] )
					{
						$cReturn = $this->oDatabase->getData( "SELECT cdCategoriaEstablecimiento FROM gtEstablecimientoFuncion as EAc JOIN gcCategoriaEstablecimiento as Act ON Act.ncCategoriaEstablecimiento = EAc.ncCategoriaEstablecimiento AND EAc.ncFuncion = Act.ncFuncion  WHERE  EAc.ncFuncion = " . $this->aFields['ncFuncion'] . " AND ncEstablecimiento = " . $aRow['ncEstablecimiento'] );
						$cReturn = extractLanguage( $cReturn , 'es' );
					}
					break;
				case 'KeyLookUp':
					$cReturn = $aRow['ncEstablecimiento'];
					break;
				case 'DescriptionLookUp':
					$cReturn = str_replace( "'", " ", $aRow['cdEstablecimiento'] );
					$cReturn = str_replace( "\"", " ", $cReturn );
					break;
				case 'Estado':
					//if ( $aRow['dModificado']  )
					$cReturn = "Nuevo";
					break;
				case 'Domicilio':
					//$this->oDomicilio->setValue(  );
					$cReturn = $this->oDomicilio->getDescription( $aRow["ncDomicilio"] );
					break;
				case 'Ubicacion':
					$cReturn = $this->oDomicilio->getUbicacion();
				break;
				case 'CodigoUbicacion':
					$cReturn = $this->oDomicilio->aFields['ncUbicacion']->getValue();
				break;
				case 'Telefono':
					$cReturn = $this->oDomicilio->aFields['cTelefono']->getValue();
					break;
				case 'Coordenadas':
					$cReturn = '(' . $this->oDomicilio->aFields['nLatitud']->getValue() . ' - '	. $this->oDomicilio->aFields['nLongitud']->getValue() .')';
					$cReturn = '<a target=\'_blank\' href=\'http://maps.google.com/?q=' . $this->oDomicilio->aFields['nLatitud']->getValue() . ','	. $this->oDomicilio->aFields['nLongitud']->getValue(). '\' >(' . $this->oDomicilio->aFields['nLatitud']->getValue() . ' - '	. $this->oDomicilio->aFields['nLongitud']->getValue() .')</a>';
					break;
				case 'Direccion':
					$cReturn = $this->oDomicilio->aFields['cCalle']->getValue();
					break;
				case 'Altura':
					$cReturn = $this->oDomicilio->aFields['nNumero']->getValue();
					break;
				default:
					return false;
				break;
			}
			return $cReturn;
		}
	function makeListActions()
		{
			// Si es un subestablecimiento
			if ( $this->aFields["ncEstablecimientoPadre"] ) 
			{
				$cParametroRegistro =  "ncEstablecimientoPadre=" . $this->aFields["ncEstablecimientoPadre"] ;
				$this->addListAction ( AGREGAR_UN_ESTABLECIMIENTO, $cParametroRegistro , 'I', VENTANA_SECUNDARIA );
			} else
			{
				$cParametroRegistro =  $this->getFieldString();
				$this->addListAction ( AGREGAR_UN_ESTABLECIMIENTO, $cParametroRegistro , 'I', VENTANA_SECUNDARIA );
				$ncFuncion  = getParam("ncFuncion");
				if ( $ncFuncion ) $this->addListAction ( PUBLICAR_ESTABLECIMIENTOS , "ncFuncion=$ncFuncion", '', VENTANA_SECUNDARIA );
				else	$this->addListAction ( PUBLICAR_ESTABLECIMIENTOS , "ncFuncion=-1", '', VENTANA_SECUNDARIA );
			}
		}
	function makeRowActions( $aRow )
		{
			$ncFuncion  = getParam("ncFuncion");
			$cParametroRegistro =  "ncEstablecimiento=" . $aRow["ncEstablecimiento"] . "&amp;ncFuncion=" . $ncFuncion;
			//$this->addRowAction ( AGREGAR_UN_ESTABLECIMIENTO, "ncEstablecimientoPadre=" . $aRow["ncEstablecimiento"]  , 'I', VENTANA_SECUNDARIA );
			$this->addRowAction ( MODIFICAR_UN_ESTABLECIMIENTO, $cParametroRegistro , '') ;
			$this->addRowAction ( ELIMINAR_UN_ESTABLECIMIENTO,  $cParametroRegistro );
			$this->addRowAction ( ENVIAR_EMAIL_ESTABLECIMIENTO,  $cParametroRegistro );
		}
	function makeComplex ()
		{
			$this->oModule->setSubModule("recorridos");
			$oLst = $this->oModule->loadClass ( "atractivo_lst" );
			$oLst->aFields['ncEstablecimiento'] = $this->aFields['ncEstablecimiento'];
			$oLst->setNoPaging();
			$oLst->makeDir();
		}

	}
?>